package ProxyDemoCodes;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * <pre>
 * Created with IntelliJ IDEA.
 * User: zhengzhi
 * Date: 2017/11/30
 * Time: 16:00
 * To change this template use File | Settings | File Templates.
 * </pre>
 *
 * 代理模式是常用的java设计模式，特征是代理类与委托类有同样的接口，
 * 代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类，以及事后处理消息等。
 * 代理类与委托类之间通常会存在关联关系，一个代理类的对象与一个委托类的对象关联，代理类的对象本身并不真正实现服务，而是通过调用委托类的对象的相关方法，来提供特定的服务。
 */
public class TestClient {

    public static void main(String[] args) {

        //被代理的类
        RealSubject realSubject = new RealSubject();

        //初始化代理类
        InvocationHandler handler = new ProxySubject(realSubject);


        Subject subject = (Subject) Proxy.newProxyInstance(handler.getClass().getClassLoader(), realSubject.getClass().getInterfaces(), handler);
        subject.request();
    }
}
